// 插件是一个对象，可以通过 new 来生成实例
// 插件需要实现一个 apply 方法接收一个 compiler 参数
// compiler 是 webpack 的一个实例，上面有许多的钩子
// 将要实现的功能 挂到 compiler 的钩子上，具体有哪些钩子可以查阅 webpack 官网


// 删除 打包输出 js 中的 /**** */
class DelCommentPlugin {
  apply(compiler) {
    // console.log("DelCommentPlugin 启动了");
    compiler.hooks.emit.tap("DelCommentPlugin", (compilation) => {
      // compilation => 可以理解为此次打包的上下文
      // compilation.assets 可以拿到此次打包输出的所有文件对象
      for (const name in compilation.assets) {
        // console.log(name)
        // console.log(compilation.assets[name].source())
        if (name.endsWith(".js")) {
          const contents = compilation.assets[name].source();
          const withoutComments = contents.replace(/\/\*\*+\*\//g, "");
          compilation.assets[name] = {
            source: () => withoutComments,
            // size 是 webpack 要求必须返回的
            size: () => withoutComments.length,
          };
        }
      }
    });
  }
}

module.exports = DelCommentPlugin;
